
const app = getApp()

Page({

  /**
   * 页面的初始数据
   */
  data: {
    family: 0,    //文章所属家族
    article: 0,   //当前文章id
    is_mine: false,  //是否自己创建的文章 或者 属于自己的文章

    has_edit: false,  //是否有编辑过内容或标题

    html: '', //文章
    comments: [],

    showEditDialog: false,
    editDialogGroups: [
        { text: '修改标题', value: 1 },
        { text: '修改内容', value: 2 },
        { text: '删除文章', value: 3 },
    ],

    buttons: [{text: '取消'}, {text: '保存'}],
    showDialog: false,
    article_title_focus: false,
    article_title: '',  //当前界面显示
    article_title_bak: '', //实际数据
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    //这里一般比editor ready提前
    this.setData({
      family: parseInt(options.family),
      article: parseInt(options.article),
    })
    
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {
    if (this.data.has_edit) {
      //有编辑过, 需刷新该文章
      //上一页一定是文章列表页
      let pages = getCurrentPages()  
      let prevPage = pages[pages.length - 2]  
      if (prevPage.refreshSingleArticle) {
        prevPage.refreshSingleArticle(this.data.article)
      }
    }
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  },

  onStatusChange(e) {
    const formats = e.detail
    this.setData({ formats })
  },

  loadArticle() {
    app.httpRequest('get_family_article_info', {
      article: this.data.article,
      family: this.data.family
    }, res => {
      console.log('get_family_article_info succ: ', res)
      this.setData({
        article_title: res.title,
        article_title_bak: res.title,
        comments: res.comments || [],
      })
      if (res.create_person == app.globalData.curr_person) {
        //自己是文章创建者
        this.setData({
          is_mine: true
        })
      }

      let json = JSON.parse(res.content_delta)
      this.editorCtx.setContents({
        "delta": json,
        success: () => {
          //注意： 此处可以将delta转化为html或text
          let data = this.editorCtx.getContents({
            success: e => {
              this.setData({
                html:  `
                <h1 style="text-align:center;">${res.title}</h1>
                ${e.html}
                <p style="margin-top:5px;font-size:0.8em;color:gray;text-align:right;">创建人: ${res.create_person_name}<br/> 最近编辑：${res.edit_person_name}&nbsp;${res.edit_time}</p>
                `
              })
            }
          })
        },
        fail: () => {
          app.showTip('delta格式错误!')
          console.error('delta格式错误!')
        }
      })

    }, res => {
      console.error('get_family_article_info fail: ', res)
    })
  },

  onEditorReady() {
    wx.createSelectorQuery().select('#editor').context(res => {
      console.log('aaaaaaa')
      this.editorCtx = res.context
      this.loadArticle()
    }).exec()
  },

  tapEdit(e) {
    this.setData({
      showEditDialog: true
    })
  },

  onActionSheetClicked(e) {
    if (e.detail.value == 1) {
      //修改标题
      this.setData({
        showDialog: true,
        article_title_focus: true,
        article_title: this.data.article_title_bak
      })
    } else if (e.detail.value == 2) {
      //修改内容
      wx.navigateTo({
        url: '../editor/edit_family_log?article=' + this.data.article + '&family=' + this.data.family
      })
    } else if (e.detail.value == 3) {
      //删除文章
      wx.showModal({
        title: '警告',
        confirmColor: '#FF0000',
        content: '确定删除本篇文章？',
        success: res => {
          if (res.confirm) {
            console.log('用户点击确定')
            this.setData({
              has_edit: false
            })
            this.OnDeleteThisArticle()
          } else if (res.cancel) {
            console.log('用户点击取消')
          }
        }
      })
    }
    this.setData({
      showEditDialog: false
    })
  },

  OnDeleteThisArticle() {
    app.httpRequest('del_family_article', {
      family: this.data.family,
      article: this.data.article
    }, res => {
      //删除成功
      //返回
      let pages = getCurrentPages()  //获取当前页面js里面的pages里的所有信息。
      let prevPage = pages[pages.length - 2]  //prevPage 是获取上一个页面的js里面的pages的所有信息。 -2 是上一个页面，-3是上上个页面以此类推。
      if (prevPage.BeginLoadArticles) {
        prevPage.BeginLoadArticles()  //文件列表重新加载
      }
      wx.navigateBack()

    }, res => {
      console.log('delete fail: ', res)
    })
  },

  OnArticleTitleInput(e) {
    this.data.article_title = e.detail.value
  },

  tapDialogButton(e) {
    if (e.detail.item.text == "保存") {
      let title = this.data.article_title.trim()
      if (title.length == 0) {
        app.showTip("文章标题不能为空")
        return
      } else if (title.length > 255) {
        app.showTip('文章标题不能超过255个字！')
        return
      }
  
      app.httpRequest('edit_family_article_title', {
        article: this.data.article,
        family: this.data.family,
        title: title
      }, res => {
        this.loadArticle()
        this.setData({
          has_edit: true
        })
      }, res => {
        console.log('fail: ', res)
      })

      this.setData({
        showDialog: false,
        article_title_focus: false
      })

    } else {
      //取消
      this.setData({
        showDialog: false,
        article_title_focus: false,
        article_title: this.data.article_title_bak
      })
    }
  },

  addComment(e) {
    app.navigateToTextAreaPage('', text => {
      app.httpRequest('add_family_article_comment', {
        family: this.data.family,
        article: this.data.article,
        comment: text
      }, res => {
        this.setData({
          comments: res
        })

      }, res => {
        console.log('add article comment failed: ', res)
      })

    }, '请输入评论...')
  }
})